{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 12. Continuous Latent Variables"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "from sklearn import datasets\n",
    "%matplotlib inline\n",
    "\n",
    "from prml.feature_extractions import Autoencoder, BayesianPCA, PCA\n",
    "\n",
    "np.random.seed(1234)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "iris = datasets.load_iris()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 12.1 Principal Component Analysis"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1189ec6a0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "pca = PCA(n_components=2)\n",
    "Z = pca.fit_transform(iris.data)\n",
    "plt.scatter(Z[:, 0], Z[:, 1], c=iris.target)\n",
    "plt.gca().set_aspect('equal', adjustable='box')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 12.1.4 PCA for high-dimensional data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1189ec630>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "mnist = datasets.fetch_mldata(\"MNIST original\")\n",
    "mnist3 = mnist.data[np.random.choice(np.where(mnist.target == 3)[0], 200)]\n",
    "pca = PCA(n_components=4)\n",
    "pca.fit(mnist3)\n",
    "plt.subplot(1, 5, 1)\n",
    "plt.imshow(pca.mean.reshape(28, 28))\n",
    "plt.axis('off')\n",
    "for i, w in enumerate(pca.W.T[::-1]):\n",
    "    plt.subplot(1, 5, i + 2)\n",
    "    plt.imshow(w.reshape(28, 28))\n",
    "    plt.axis('off')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 12.2.2 EM algorithm for PCA"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1187316a0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "pca = PCA(n_components=2)\n",
    "Z = pca.fit_transform(iris.data, method=\"em\")\n",
    "plt.scatter(Z[:, 0], Z[:, 1], c=iris.target)\n",
    "plt.gca().set_aspect('equal', adjustable='box')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 12.2.3 Bayesian PCA"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nABAECRkAgvh/v9yTGqfRIdkAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x11dcb7198>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def create_toy_data(sample_size=100, ndim_hidden=1, ndim_observe=2, std=1.):\n",
    "    Z = np.random.normal(size=(sample_size, ndim_hidden))\n",
    "    mu = np.random.uniform(-5, 5, size=(ndim_observe))\n",
    "    W = np.random.uniform(-5, 5, (ndim_hidden, ndim_observe))\n",
    "\n",
    "    X = Z.dot(W) + mu + np.random.normal(scale=std, size=(sample_size, ndim_observe))\n",
    "    return X\n",
    "\n",
    "def hinton(matrix, max_weight=None, ax=None):\n",
    "    \"\"\"Draw Hinton diagram for visualizing a weight matrix.\"\"\"\n",
    "    ax = ax if ax is not None else plt.gca()\n",
    "\n",
    "    if not max_weight:\n",
    "        max_weight = 2 ** np.ceil(np.log(np.abs(matrix).max()) / np.log(2))\n",
    "\n",
    "    ax.patch.set_facecolor('gray')\n",
    "    ax.set_aspect('equal', 'box')\n",
    "    ax.xaxis.set_major_locator(plt.NullLocator())\n",
    "    ax.yaxis.set_major_locator(plt.NullLocator())\n",
    "\n",
    "    for (x, y), w in np.ndenumerate(matrix):\n",
    "        color = 'white' if w > 0 else 'black'\n",
    "        size = np.sqrt(np.abs(w) / max_weight)\n",
    "        rect = plt.Rectangle([y - size / 2, x - size / 2], size, size,\n",
    "                             facecolor=color, edgecolor=color)\n",
    "        ax.add_patch(rect)\n",
    "\n",
    "    ax.autoscale_view()\n",
    "    ax.invert_yaxis()\n",
    "    plt.xlim(-0.5, np.size(matrix, 1) - 0.5)\n",
    "    plt.ylim(-0.5, len(matrix) - 0.5)\n",
    "\n",
    "X = create_toy_data(sample_size=100, ndim_hidden=3, ndim_observe=10, std=1.)\n",
    "pca = PCA(n_components=9)\n",
    "pca.fit(X)\n",
    "bpca = BayesianPCA(n_components=9)\n",
    "bpca.fit(X, initial=\"eigen\")\n",
    "plt.subplot(1, 2, 1)\n",
    "plt.title(\"PCA\")\n",
    "hinton(pca.W)\n",
    "plt.subplot(1, 2, 2)\n",
    "plt.title(\"Bayesian PCA\")\n",
    "hinton(bpca.W)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "### 12.4.2 Autoassociative neural networks"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "autoencoder = Autoencoder(4, 3, 2)\n",
    "autoencoder.fit(iris.data, 10000, 1e-3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nm5loJgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x118b62fd0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "Z = autoencoder.transform(iris.data)\n",
    "plt.scatter(Z[:, 0], Z[:, 1], c=iris.target)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
